![]() |
![]() |
|
rtk 20182018.1.1Collatz++ 1. podnalogaCollatzevo zaporedje je zaporedje naravnih števil, v katerem je vsak člen izračunan iz
prejšnjega po naslednjem pravilu: če je prejšnji člen — recimo mu Konkretno zaporedje, ki ga na ta način dobimo, je odvisno od tega, s katerim številom
začnemo. Na primer, Collatzevo zaporedje z začetnim členom Kmalu pa je opazil, da ima njegova funkcija pomanjkljivost, saj NalogaNapiši funkcijo Vhodni podatkiParametra funkcije sta celi števili
Izhodni podatkiSeznam z začetnimi členi, ki dosežejo maksimum
Primer
Uradna rešitevdef poisci_vse(zacetek_intervala, konec_intervala): '''Poišče in vrne začetne člene med a in b, pri katerih je dosežen maksimum v collatzevem zaporedju ''' naj_vrednost = 0 seznam_zacetnih_clenov = [] for zacetni_clen in range(zacetek_intervala, konec_intervala + 1): collatzev_clen = max_collatzev_clen = zacetni_clen while collatzev_clen != 1: # zaženemo Collatzevo zaporedje collatzev_clen = collatzev_clen // 2 if collatzev_clen % 2 == 0 else 3 * collatzev_clen + 1 if collatzev_clen > max_collatzev_clen: max_collatzev_clen = collatzev_clen # vsakič ko presežemo max vrednost zabeležimo novo if max_collatzev_clen > naj_vrednost: seznam_zacetnih_clenov.clear() naj_vrednost = max_collatzev_clen # če imamo najboljšo rešitev jo shranimo if max_collatzev_clen == naj_vrednost: seznam_zacetnih_clenov.append(zacetni_clen) # če imamo enako dobro rešitev jo dodamo return seznam_zacetnih_clenov 2018.1.2Alfa Bravo 1. podnalogaPalček Godrnjavček je postal vodja tajne službe, ki skrbi za varnost Sneguljčice, njegova naloga pa je, da sprejema podatke agentov na terenu in jim daje navodila, kako naj ukrepajo. Da bi se palčki zaščitili pred napakami pri sporazumevanju, so uvedli fonetično abecedo, ki posamezni črki priredi besedo.
Godrnjavček te prosi, da napišeš funkcijo, ki bo znala vneseno besedilo dekodirati. Kot vhod torej dobi datoteko s seznamom kodnih besed iz gornje tabele (vsaka v svoji vrstici), vrne pa naj pripadajoče zaporedje črk. Pri tem naj bo odporna tudi na manjše napake pri kodiranju: namesto prave kodne besede se lahko v vhodnih podatkih pojavi taka beseda, ki se od prave razlikuje v največ enem znaku (je pa zagotovo še vedno enako dolga kot prava kodna beseda). Tako se lahko na primer zgodi, da namesto besede LIMA dobimo RIMA ali LINA ali LQMA in tako naprej, vse te besede pa ravno tako predstavljajo črko L. NalogaNapiši funkcijo Vhodni podatkiTekstovna datoteka z zakodiranim sporočilom z napakami:
Izhodni podatkiNiz z dekodiranim sporočilom
KomentarNa tekmovanju je bilo možno izbirati med branjem s standardnega vhoda in branjem z datoteke. Uradna rešitevkode = ["ALFA", "BRAVO", "CHARLIE" , "DELTA", "ECHO","FOXTROT","GOLF","HOTEL","INDIA","JULIET", "KILO","LIMA","MIKE","NOVEMBER","OSCAR","PAPA","QUEBEC","ROMEO","SIERRA","TANGO","UNIFORM", "VICTOR","WHISKY","X-RAY","YANKEE","ZULU"] def se_ujema(beseda, koda): '''Funkcija preveri, ali se dana beseda ujema s kodo (z največ 1 napako) in vrne True ali False''' dolzina_besede = len(beseda) st_neujemanj = 0 if len(koda) != dolzina_besede: return False for i in range(dolzina_besede): if beseda[i] == koda[i]: continue st_neujemanj += 1 if st_neujemanj > 1: return False return True def dekodiraj(dat): '''Funkcija pretvori zakodirano sporočilo v datoteki v nam razumljivo, jo shrani v niz in vrne.''' dekodirana_beseda = '' sporocilo = open(dat,'r',encoding='utf-8') for vrstica in sporocilo: for beseda in vrstica.split(): for znak in range(len(kode)): if se_ujema(beseda, kode[znak]): dekodirana_beseda += (chr(ord('A') + znak)) break sporocilo.close() return dekodirana_beseda 2018.1.3Sestavljanka 1. podnalogaGojmir je na polici opazil škatlo s sestavljanko, ki ima Koliko koščkov v resnici pride po višini in koliko po širini? Pravokotnik iz Vprašanje je torej, pri katerem od teh pravokotnikov je razmerje med višino in širino najbližje tistemu, ki ga je ocenil Gojmir. NalogaNapiši funkcijo Vhodni podatkiParametra funkcije sta število koščkov (naravno število) in razmerje (realno število)
Izhodni podatkiFunkcija mora vrniti par
(8 vrstic, 17 stolpcev). Pri tej sestavljanki je razmerje med višino in širino enako
Uradna rešitevdef sestavljanka(st_kosov, razmerje): '''Izračuna in vrne tisti približek za razmerje višina:širina, ki je najbljižje razmerju ''' for h in range(1, st_kosov + 1): if st_kosov % h != 0: continue priblizek = st_kosov // h razlika = abs(h / priblizek - razmerje) if h == 1 or razlika < min_razlika: naj_visina = h min_razlika = razlika return (naj_visina, st_kosov // naj_visina) 2018.1.5Brzinomer 1. podnalogaV avtomobilu za prikaz trenutne hitrosti vozila skrbi instrument (brzinomer), ki je lahko digitalen (prikazuje številke) ali pa analogen (fizični kazalec instrumenta se pomika po skali in s svojo lego kaže izmerjeno hitrost). A tudi prikazovalniki s kazalcem in skalo so doživeli svojo prenovo in niso več preprosti analogni merilniki neke fizikalne veličine, ampak gre za prikazovalnike, kjer je kazalec pritrjen na os miniaturnega koračnega elektromotorčka, pomike tega pa krmili avtomobilski računalnik glede na hitrost, ki jo izmerijo tipala hitrosti. Naš prikazovalnik ima skalo v obsegu od Premik koračnega motorčka za en korak (oz. kazalca, pritrjenega nanj, za NalogaNapiši funkcijo Glede na svoje vedenje o trenutni legi kazalca brzinomera naj funkcija vrne
vrednost Upoštevaj, da se lahko hitrost avtomobila med dvema zaporednima klicema tvoje funkcije
spremeni tudi za več kot Upoštevaj tudi, da ob zagonu avtomobilskega računalnika ne vemo točno, kje je
obtičal kazalec brzinomera — lahko bi se npr. zgodilo, da je bil motor avtomobila (in
računalnik) ugasnjen, še preden se je avtomobil dokončno ustavil na domačem dvorišču.
Da zagotovimo znano lego kazalca, si lahko pomagamo z informacijo iz drugega odstavka,
ki zagotovi, da z
ko napišeš funkcijo. Uradna rešitevMax = 250 kazalec = 0 zacetek = Max def premik(hitrost): '''Premakne kazalec za 1 naprej, če je hitrost povečana in nazaj če je zmanjšana.''' global kazalec, zacetek if zacetek > 0: zacetek -= 1 return -1 if hitrost < 0: hitrost = 0 if hitrost > Max: hitrost = Max if hitrost > kazalec: premik = 1 elif hitrost < kazalec: premik = -1 else: premik = 0 kazalec += premik return premikMesto objave ob koncu projekta 15.9.2018 |